//#ifdef a
#pragma once
//#pragma warning(disable:4996)

//学生信息管理系统->单向不循环链表形式


//没有进行加密操作
//未将时间进行存储
//管理员设置为默认管理员（已定义结构体，感兴趣的可以修改为多个管理员）



#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<windows.h>
#include<time.h>
#include<ctype.h>

//管理员账户
#define ACCOUNT "zhaoliang"
#define PASSWORD "20021124"

typedef struct Student {
	char name[20];//姓名
	char sex[5];//性别
	char stu_number[15];//学号
	char cell_phone_number[15];//手机号
	struct Student* next;//下一个节点
	int math;//数学成绩
	int english;//英语成绩
	int aggregrate_score;//总成绩
	int place;//排名
	//.......省略
}Stu;

//管理员的用户和密码可以在对应文件中添加。程序默认管理员账户为了测试方便，在宏定义中给出
typedef struct Admin {
	char account[15];
	char password[15];
}Admin;

int print_flag;//打印的一个标志
int admin_flag;//管理员登录标志
int end_delete_flag;//删除最后一个节点时所有标志

extern Stu* BuyStuNode();//节点创建
extern void IncreaseStuInfo(Stu** stu_node);//添加信息（尾插）
extern void Check(Stu* new_node, int flag);//信息合法性检查
extern void Menu();//页面菜单
extern void Modify(Stu** stu_node);//学生信息修改
extern Stu* SeekStu(Stu* stu_node);//学生信息查找（学号 | 姓名）
extern Stu* NameFind(Stu* stu_node, char find_name[]);//按姓名查找
extern Stu* StuNumberFind(Stu* stu_node, Stu* find_stu_number);//按学号查找
extern void MyPrintf(Stu* stu_node);//打印某人信息
extern void CreateMyFile();//文件的创建
extern void TestStu();//测试
extern void Refresh();//屏幕刷新
extern void PrintRank(Stu* qsort_stu[],int sz);//排名打印函数
extern void RankAggregateScore(Stu* stu_node);//统计/排序（但只改变链表，不改变文件信息）
extern void Color(int color);//颜色设置
extern void MyCompare(Stu* qsort_stu[], int sz, int select);//成绩比较
extern void PrintSize(Stu* stu_node);//有效节点个数
extern void ReadMyFile(Stu** stu_node);//读取文件信息，将文件信息存入链表
extern void PrintfAllStuInformation(Stu* stu_node);//打印所有学生信息
extern void DestoryAllStu(Stu** stu_node);//删除所有学生信息（销毁链表，清空文件）
extern void DestoryOneStu(Stu** stu_node);//根据学号一个学生的信息
extern void CreateAdminFile();//管理员登录信息文件的创建
extern void AdminLogIn();//管理员登录标志
extern void MyTime();//获取时间
//#endif



